#include <stdio.h>

#ifndef LOG_H
#define LOG_H

#define LOG_LEVEL_3 1
// 日志级别定义
// LOG_LEVEL_1: 只打印LOG_ERROR
// LOG_LEVEL_2: 打印LOG_ERROR和LOG_WARN
// LOG_LEVEL_3: 打印LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG
// LOG_LEVEL_4: 打印所有日志包括LOG_VERBOSE（用于详细调试）
// 如果没有定义任何级别，默认为LOG_LEVEL_3

// 如果定义了LOG_NO，则禁用所有日志输出
#ifdef LOG_NO
#define LOG_ERROR(fmt, ...)
#define LOG_WARN(fmt, ...)
#define LOG_INFO(fmt, ...)
#define LOG_DEBUG(fmt, ...)
#define LOG_VERBOSE(fmt, ...)
#else

// 根据定义的日志级别设置宏
#if defined(LOG_LEVEL_1)
#define LOG_ERROR(fmt, ...) 
#define LOG_WARN(fmt, ...)
#define LOG_INFO(fmt, ...) printf("[INFO]  " fmt "\n", ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...)
#define LOG_VERBOSE(fmt, ...)
#elif defined(LOG_LEVEL_2)
#define LOG_ERROR(fmt, ...) 
#define LOG_WARN(fmt, ...) printf("[WARN]  " fmt "\n", ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) printf("[INFO]  " fmt "\n", ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...)
#define LOG_VERBOSE(fmt, ...)
#elif defined(LOG_LEVEL_3)
#define LOG_ERROR(fmt, ...) printf("[ERROR] " fmt "\n", ##__VA_ARGS__)
#define LOG_WARN(fmt, ...) printf("[WARN]  " fmt "\n", ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) printf("[INFO]  " fmt "\n", ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...) printf("[DEBUG] " fmt "\n", ##__VA_ARGS__)
#define LOG_VERBOSE(fmt, ...)
#else // LOG_LEVEL_4或未定义级别
#define LOG_ERROR(fmt, ...) printf("[ERROR] " fmt "\n", ##__VA_ARGS__)
#define LOG_WARN(fmt, ...) printf("[WARN]  " fmt "\n", ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) printf("[INFO]  " fmt "\n", ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...) printf("[DEBUG] " fmt "\n", ##__VA_ARGS__)
#define LOG_VERBOSE(fmt, ...) printf("[VERBOSE] " fmt "\n", ##__VA_ARGS__)
#endif

#endif // LOG_NO

#endif // LOG_H
